package eu.epfc.dnet.mastermind.model.utils;

import eu.epfc.dnet.mastermind.model.beans.Token;
import eu.epfc.dnet.mastermind.model.pojos.Line;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Pierre Buvé & Nicolas Van Damme
 */
public class PropositionCorrector {

    /**
     * Methode chargée de corriger la ligne recue en paramètre en la comparant
     * avec la correction recue en paramètre.
     *
     * @param line
     * @param solution
     */
    public void correctLine(Line line, List<Token> solution) {
        List<Token> correction = new ArrayList<Token>();
        List<String> corrigé = new ArrayList<String>();
         for (int i = 0; i < 4; i++) {
            if (line.get(i).getColor().equals(solution.get(i).getColor())) {
                // Si l'élément i de la proposition est égal à l'élément i de la
                // solution => pion blanc
                correction.add(new Token("pblanc"));
                corrigé.add(line.get(i).getColor());
            }
        }
        for (int i = 0; i < line.size(); i++) {
        if (isTokenIn(line.get(i), solution) && (!corrigé.contains(line.get(i).getColor()))) {
                // Sinon si l'élément i de la proposition existe dans la 
                // solution => pion noir
                correction.add(new Token("pnoir"));
            }
        }
        for (int j = 0; j < correction.size(); j++) {
            line.set(j + 4, correction.get(j));
        }
    }

    /**
     * Methpde vérifiant si un pion recu en paramètre se trouve dans la solution
     * recue en paramètre.
     *
     * @param token
     * @param solution
     * @return
     */
    private Boolean isTokenIn(Token token, List<Token> solution) {
        Boolean result = false;
        for (int j = 0; j < solution.size(); j++) {
            if (token.getColor().equals(solution.get(j).getColor())) {
                result = true;
            }
        }
        return result;
    }
}
